uint8 | 您所在的位置:网站首页 › uint16-t printf › uint8 |
uint8_t / uint16_t / uint32_t /uint64_t 都是别名,c语言中有哪些数据类型?怎么样取别名 在C语言中有6种基本数据类型:short、int、long、float、double、char 1、数值类型 1)整型:short、int、long 2)浮点型:float、double 2、字符类型:char 二、使用 typedef 为什么喜欢叫它 int8_t, uint8_t;int16_t, uint16_t;int32_t, uint32_t? 1,数据类型中都带有_t, _t 表示这些数据类型是通过typedef定义的,而不是新的数据类型。也就是说,它们其实是我们已知的类型的别名。 2,8,16,32又是什么意思? 这些数字都是位数,即,使用多少位来存储数据,一个字节8位,其中因为数字有正负之粉,对应有符号(signed,最高位为0,表示正数)和无符号(unsigned,最高位为1,表示负数),所以表示的范围不一样,但是因为位数一致,故表示的个数是一样的。 比如使用16位,也就是两个字节来存储 可以是 typedef signed short int int16_t;//给有符号短整型short int,取别名int16_t 也可以是 typedef unsigned short int uint16_t;//给无符号短整型short int,取别名为uint16_t uint16_t 表示数据范围则是0 ~65535。 int16_t 表示数据范围为-32768~32767 表示的个数是一样的:65536=2的16次方 参考这个博主的一段话: 整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0 ~65535。由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。同时在相同位数的情况下,所能表达的整数范围变大。 挖一下这句话 在默认情况下声明的整型变量都是有符号的类型(char有点特别),有什么特别呢 如何确认char到底是signed char还是unsigned char ANSI C 提供了3种字符类型,分别是char、signed char、unsigned char 、char相当于signed char或者unsigned char,但是这取决于编译器! 这三种字符类型都是按照1个字节存储的,可以保存256个不同的值。 signed char取值范围是 -128 到 127 unsigned char 取值范围是 0 到 255 有符号和无符号有默认的,可以省略不写,默认情况下声明的整型变量都是有符号的类型 typedef char int8_t;如果编译器认为是signed char= char,上面那句就相当于 typedef signed char int8_t;如果编译器认为是usigned char= char,上面那句就相当于 typedef usigned char int8_t;再看: typedef unsigned short int uint16_t; typedef unsigned int uint32_t;参考:C语言中的整数(short,int,long) short、int、long 是C语言中常见的整数类型,其中 int 称为整型,short 称为短整型,long 称为长整型。 int short int:int可以省略 long int:int可以省略 描述 short、int、long 类型的长度时,只对 short 使用肯定的说法,而对 int、long 使用了“一般”或者“可能”等不确定的说法。这种描述的言外之意是,只有 short 的长度是确定的,是两个字节,而 int 和 long 的长度无法确定,在不同的环境下有不同的表现。 2 ≤ short ≤ int ≤ long 这就意味着,short 并不一定真的”短“,long 也并不一定真的”长“,它们有可能和 int 占用相同的字节数。 一般short 2字节,int 4字节,liong 8字节。 这样取别名为uint8_t / uint16_t / uint32_t /uint64_t 的好处是? 1,从名字一眼就可以看出,使用多少位来存数据,统一了“标准” 2,为了程序的可扩展性, 假如我们此刻将来我们需要的数据大小变成了64bit时,我们只需要将typedef long long size_t就可以了, 不然我们可要修改好多好多的地方了,当自己设计一个int类型保存某种数据时,但你又没把握将来是不是要用long int时你可以引用一个自己定义的数据类型 假如本程序此时需要一个数据大小为32位的用来存储正数的类型 size_t 在原来已经定义的如下别名的基础上: typedef unsigned int uint32_t; typedef unsigned long int uint64_t;可以再次取别名: typedef uint32_t size_t ;如果以后要改成64位的,就改为: typedef uint64_t size_t ;size_t在代码中出现的,含义全部更改,可扩展性好。 __int64这种类型是什么? 参考:long int与long long的区别 结果: long long则不同,long long是C++的64位整型的基本类型,“现任”长整型,从C99开始引入这个概念,在后续的标准中完善概念和定义,C++11官方正式标准如下—— long long - target type will have width of at least 64 bits.(since C++11) |
CopyRight 2018-2019 实验室设备网 版权所有 |